<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>JS 闭包</title>
</head>

<body>

</body>
<script>





    // var scope = "a";
    // function fn() {
    //     console.log(scope);
    //     var scope = "b";
    //     console.log(scope);
    // }
    // fn();







    // 只要函数内定义了一个局部变量，函数在解析的时候都会将这个变量“提前声明”



    function a() {
        var i = 0;
        function b() {
            alert(++i);
        }
        return b;
    }
    var c = a();
    c();
    


    // 在Javascript中，如果一个对象不再被引用，那么这个对象就会被GC回收。如果两个对象互相引用，而不再被第3者所引用，那么这两个互相引用的对象也会被回收。因为函数a被b引用，b又被a外的c引用，这就是为什么函数a执行后不会被回收的原因。



</script>

</html>